package com.loggingbox.servlet; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.zip.GZIPInputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtil; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.log.component.LogComponent; import com.log.model.Level; import com.log.model.Log; @Component public class LogsInsertServlet extends HttpServlet { // private static final Logger LOGGER = Logger.getLogger(LogsInsertServlet.class); private static final long serialVersionUID = 1487728256420276137L; private final ObjectMapper objectMapper = new ObjectMapper(); @Autowired LogComponent logComponent; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { String logsString; String contentEncoding = req.getHeader("Content-Encoding"); if(contentEncoding != null && contentEncoding.equals("gzip")) { GZIPInputStream is = new GZIPInputStream(req.getInputStream()); logsString = IOUtil.toString(is, "UTF-8"); is.close(); }else { logsString = IOUtil.toString(req.getInputStream()); } JsonNode jsonNode = objectMapper.readTree(logsString); List<Log> logsToInsert = new ArrayList<Log>(); if (jsonNode.isArray()) { for (int i = 0; i < jsonNode.size(); i++) { JsonNode logNode = jsonNode.get(i); Log log = new Log(); if (logNode.get("date") != null) { log.setDate(new Date(logNode.get("date").asLong())); } else { log.setDate(new Date()); } log.setData(logNode.get("data").asText()); log.setApplicationId(logNode.get("applicationId").asText()); if (logNode.get("host") != null) { log.setHost(logNode.get("host").asText()); } else { log.setHost(req.getRemoteHost()); } if (logNode.get("type") != null) { log.setType(logNode.get("type").asText()); } if (logNode.get("level") != null) { try { log.setLevel(Level.valueOf(logNode.get("level") .asText().toUpperCase())); } catch (Exception ex) { } } logsToInsert.add(log); } } logComponent.insertLog(logsToInsert); resp.getWriter().write("OK"); } catch (Exception ex) { ex.printStackTrace(); resp.getWriter().write("KO"); } } }